#!/bin/bash

# 检查是否以 source 方式执行
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
  echo "❌ 此脚本应使用 'source' 运行，请使用 'source install-node.sh' 执行。"
  exit 1
fi

# 检查 nvm 是否存在
if ! command -v nvm &> /dev/null; then
  echo "⏳ 正在安装 nvm..."
  curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
  export NVM_DIR="$HOME/.nvm"
  [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
  [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
  echo "✅ nvm 已安装并加载。"
fi

# 显示可用镜像源选项
echo "请选择 Node.js 镜像源："
echo "1) 官方源（nodejs.org）"
echo "2) 清华大学源"
echo "3) 中国科学技术大学源"
echo "4) 阿里云源"
echo "5) 腾讯云源"
echo "6) npmmirror 源"
read -p "请输入选项 (1~6): " mirror_choice

case $mirror_choice in
  1)
    NODE_MIRROR="https://nodejs.org/dist"
    ;;
  2)
    NODE_MIRROR="https://mirrors.tuna.tsinghua.edu.cn/nodejs-release/release"
    ;;
  3)
    NODE_MIRROR="https://mirrors.ustc.edu.cn/nodejs-release/release"
    ;;
  4)
    NODE_MIRROR="https://npm.taobao.org/mirrors/node"
    ;;
  5)
    NODE_MIRROR="https://mirrors.cloud.tencent.com/nodejs-release/release"
    ;;
  6)
    NODE_MIRROR="https://npmmirror.com/mirrors/node"
    ;;
  *)
    echo "❌ 输入无效，默认使用官方源。"
    NODE_MIRROR="https://nodejs.org/dist"
    ;;
esac

export NVM_NODEJS_ORG_MIRROR="$NODE_MIRROR"
echo "🌐 当前使用的镜像源: $NODE_MIRROR"

# 获取远程版本列表
echo "🔄 正在获取远程 Node.js 版本列表..."
available_versions=$(nvm ls-remote --no-colors)

if [ -z "$available_versions" ]; then
  echo "❌ 无法获取远程版本列表，请检查网络连接或镜像源地址。"
  return 1
fi

echo ""
echo "👇 可用的 Node.js 版本如下："
echo "$available_versions"
echo ""

# 用户输入要安装的版本
read -p "请输入要安装的 Node.js 版本（例如 v18.20.0 或 18.20.0）: " node_version

# 格式化版本号
if [[ "$node_version" != v* ]]; then
  node_version="v$node_version"
fi

# 开始安装
echo "🔄 正在从 $NODE_MIRROR 安装 Node.js $node_version ..."
nvm install "$node_version"

# 检查是否安装成功
if nvm which "$node_version" > /dev/null; then
  echo "✅ Node.js $node_version 安装成功！"
  node -v
else
  echo "❌ 安装失败，请检查日志或重试。"
fi